Перейти к основному содержимому

5.12. Ключевые слова в Groovy

Разработчику Архитектору

Ключевые слова в Groovy

Groovy использует все ключевые слова Java и добавляет собственные для упрощения синтаксиса. Справочник разделён на логические группы для удобства использования.

Управление потоком выполнения

Ключевое словоЗначениеПример
ifУсловное выполнение кода при истинности выраженияif (age >= 18) println "Совершеннолетний"
elseАльтернативное выполнение кода при ложности условия ifif (temp > 30) println "Жарко" else println "Прохладно"
switchМножественный выбор на основе значения выраженияswitch (day) { case 1: println "Понедельник"; break; default: println "Другой день" }
caseМетка варианта в конструкции switchcase "admin": access = true; break
defaultОбработчик значений по умолчанию в switchdefault: println "Неизвестный статус"
whileЦикл с предусловиемwhile (count < 5) { println count; count++ }
doНачало цикла с постусловием вместе с whiledo { println value; value-- } while (value > 0)
forЦикл с инициализацией, условием и шагомfor (int i = 0; i < 10; i++) println i
breakПрерывание текущего цикла или оператора switchfor (item in list) { if (item == target) break }
continueПереход к следующей итерации циклаfor (n in numbers) { if (n % 2 == 0) continue; println n }
returnВозврат значения из метода и завершение его выполненияdef square(x) { return x * x }
assertПроверка условия во время выполнения с генерацией исключения при нарушенииassert balance >= 0 : "Отрицательный баланс"

Обработка исключений

Ключевое словоЗначениеПример
tryБлок кода, в котором могут возникнуть исключенияtry { readFile() } catch (IOException e) { println "Ошибка" }
catchОбработчик перехваченного исключенияcatch (FileNotFoundException e) { log.error(e) }
finallyБлок, выполняемый в любом случае после tryfinally { connection.close() }
throwГенерация исключения вручнуюthrow new IllegalArgumentException("Неверный параметр")
throwsОбъявление возможных исключений в сигнатуре методаdef process() throws IOException { ... }

Объявление классов и методов

Ключевое словоЗначениеПример
classОбъявление нового классаclass User { String name; int age }
interfaceОбъявление интерфейсаinterface Logger { void log(String message) }
traitОбъявление черты для множественного наследования поведенияtrait Greeting { String hello() { "Привет" } }
enumОбъявление перечисленияenum Status { ACTIVE, INACTIVE, SUSPENDED }
extendsУказание родительского класса при наследованииclass Admin extends User { ... }
implementsУказание реализуемых интерфейсовclass FileLogger implements Logger { ... }
newСоздание нового экземпляра классаdef user = new User(name: "Анна", age: 30)
thisСсылка на текущий объект экземпляраdef setName(String n) { this.name = n }
superСсылка на родительский классsuper(name); this.department = dept
packageОбъявление пакета для классаpackage com.example.app
importПодключение классов из других пакетовimport java.util.Date

Модификаторы доступа и свойства

Ключевое словоЗначениеПример
publicОткрытый доступ из любого местаpublic class Service { ... }
protectedДоступ внутри пакета и подклассовprotected String apiKey
privateДоступ только внутри текущего классаprivate int secretValue
staticПринадлежность элемента классу, а не экземпляруstatic int counter = 0
finalЗапрет изменения значения переменной или переопределения методаfinal String VERSION = "1.0"
abstractОбъявление абстрактного класса или метода без реализацииabstract class Shape { abstract double area() }
synchronizedСинхронизация доступа к методу в многопоточной средеsynchronized void update() { ... }
transientИсключение поля из сериализацииtransient String tempData
volatileГарантия видимости изменений переменной между потокамиvolatile boolean running = true
nativeОбъявление метода, реализованного вне JVMnative void systemCall()
strictfpПринудительное соблюдение IEEE 754 для вычислений с плавающей точкойstrictfp class Calculator { ... }

Специфичные для Groovy ключевые слова

Ключевое словоЗначениеПример
defОбъявление переменной или метода без указания конкретного типаdef name = "Грэйди"; def greet() { "Привет" }
inПроверка вхождения элемента в коллекцию или итерация в циклеif ("admin" in roles) { ... }; for (item in list) { ... }
asПриведение типа или преобразование объектаdef num = "42" as Integer; list as Set

Литералы и значения

Ключевое словоЗначениеПример
trueЛогическая истинаboolean active = true
falseЛогическая ложьif (!valid) return false
nullОтсутствие значения или ссылкиString name = null
instanceofПроверка принадлежности объекта к типуif (obj instanceof String) { ... }

Операторы и логические конструкции

Ключевое словоЗначениеПример
&&Логическое И — оба условия должны быть истиннымиif (age >= 18 && hasLicense) println "Можно водить"
``
!Логическое НЕ — инверсия булевого значенияif (!isEmpty) println "Есть данные"
?Тернарный оператор для краткой записи условияdef status = isActive ? "Активен" : "Неактивен"
?:Оператор Элвиса — возвращает левый операнд или правый при nulldef name = userName ?: "Гость"

Контекстные ключевые слова и модификаторы

Ключевое словоЗначениеПример
constОбъявление константы времени компиляцииstatic final int MAX_SIZE = 100
varВывод типа переменной на основе присваиваемого значенияvar list = [1, 2, 3]; var name = "Тест"
byДелегирование свойств через объектclass User { String name by delegate }
withВыполнение блока кода в контексте объектаuser.with { name = "Алекс"; age = 25 }
tapВыполнение блока и возврат исходного объектаdef result = new User().tap { name = "Мария" }
letВыполнение блока с объектом и возврат результата блокаdef length = "Groovy".let { it.size() }

Ключевые слова для работы с потоками

Ключевое словоЗначениеПример
threadСоздание и управление потоками выполненияthread { println "В фоновом потоке" }
synchronizedСинхронизация доступа к критической секцииsynchronized void update() { counter++ }

Директивы компилятора

Ключевое словоЗначениеПример
@GrabАвтоматическое подключение зависимостей из Maven@Grab('org.apache.commons:commons-lang3:3.12.0')
@FieldПреобразование переменной скрипта в поле класса@Field String name = "Глобальное"
@LazyОтложенная инициализация свойства@Lazy List items = loadItems()
@DelegateАвтоматическая делегация методов@Delegate Date birthday
@MemoizedКэширование результатов метода@Memoized int factorial(int n) { ... }
@TypeCheckedСтатическая проверка типов во время компиляции@TypeChecked void process() { ... }
@CompileStaticСтатическая компиляция для повышения производительности@CompileStatic int calculate() { ... }

Зарезервированные слова (не используемые в текущих версиях)

Ключевое словоЗначениеПример
gotoЗарезервировано, но не реализовано
constЗарезервировано для будущего использования

Специальные операторы и синтаксические конструкции

КонструкцияЗначениеПример
<=>Оператор сравнения (возвращает -1, 0, 1)def cmp = a <=> b
==~Проверка соответствия регулярному выражениюif (text ==~ /\d+/) println "Только цифры"
=~Создание объекта сопоставления с регулярным выражениемdef matcher = text =~ /\w+/
*.Оператор распыления — вызов метода для всех элементов коллекцииnames*.toUpperCase()
?.Безопасное обращение к методу или свойствуuser?.address?.city
&.Оператор цепочки вызовов с сохранением контекстаlist.collect { it * 2 }&.sort()
.@Прямой доступ к полю объекта, минуя геттерuser.@name = "Напрямую"
asПриведение типа или преобразование"123" as Integer
inПроверка принадлежности к коллекцииif (item in list) { ... }

Ключевые слова для метапрограммирования

Ключевое словоЗначениеПример
metaClassДоступ к метаклассу объекта для динамического измененияString.metaClass.shout = { -> delegate.toUpperCase() }
propertyMissingПерехват обращения к несуществующему свойствуdef propertyMissing(String name) { ... }
methodMissingПерехват вызова несуществующего методаdef methodMissing(String name, args) { ... }
invokeMethodПерехват всех вызовов методов объектаdef invokeMethod(String name, args) { ... }